TypeScript는 일련의 규칙을 통해 변수가 어떤 type을 가지는지 예측해준다.
변수가 어떻게 정의되는가에 따라 타입이 추론된다.
let foo = 123; // number
let bar = "hello" // string
foo = bar; // 타입 추론에 의해 에러표시
어떤 값이 반환 되는지에 따라 함수 반환 타입이 추론된다.
function add(a: number, b: number) {
return a + b; // number
}
foo
는 Adder
type이라고 직접 명시해주었다. 그래서 a,b
가 number
임을 직접 명시하지 않아도 알 수 있다.
type Adder = (a: number, b: number) => number;
let foo: Adder = (a,b) => a+b;
let foo = {
a: 123,
b: 456
}
// foo.a는 number로 추론됨
let {a} = foo; // a는 number
const bar = [1,2,3];
// bar[0]는 number로 추론됨
let [a, b, c] = bar; // a,b,c는 number
ℹ️ Type Guard를 이용하여 타입 추론의 범위를 좁혀나갈 수 있다.
// 예시
type ReturnValue = {
string_argument: string;
color_argument: string;
object_argument: RandomObject[];
};
type ParameterType = keyof ReturnValue;